package com.topscomm.core;

import java.io.InputStream;
import java.util.Map;

import com.topscomm.file.FileInfoDTO;

/**
 * 文件存储服务接口
 * 
 * @description:
 * @author: donghang
 * @date: 2021年3月13日下午10:20:58
 * @modify:
 */
public interface IFileStoreService {
	/**
	 * 得到上传的id
	 * 
	 * @description:
	 * @param fileInfo
	 * @return
	 * @author: donghang
	 * @date: 2021年3月18日下午3:35:26
	 * @modify:
	 */
	String getUpdateId(FileInfoDTO fileInfo);

	/**
	 * 
	 * @description:
	 * @param fileInfo
	 * @return
	 * @author: donghang
	 * @date: 2021年3月18日下午2:28:05
	 * @modify:
	 */
	Map<String, Object> initMultiPartUpload(FileInfoDTO fileInfo);

	/**
	 * 
	 * @description:
	 * @param fileInfo
	 * @param uploadId
	 * @return
	 * @author: donghang
	 * @date: 2021年3月18日下午2:27:24
	 * @modify:
	 */
	boolean mergeMultipartUpload(FileInfoDTO fileInfo, String uploadId);

	/**
	 * 
	 * @description:
	 * @param fileInfo
	 * @return
	 * @throws Exception
	 * @author: donghang
	 * @date: 2021年3月18日下午3:35:22
	 * @modify:
	 */
	String upload(FileInfoDTO fileInfo) throws Exception;

	/**
	 * 采用预签名方式上传
	 * 
	 * @description:
	 * @param filePath
	 * @return
	 * @throws Exception
	 * @author: donghang
	 * @date: 2021年3月16日下午1:47:40
	 * @modify:
	 */
	String uploadPresigned(InputStream inputStream, String url) throws Exception;

	/**
	 * 文件存储
	 * 
	 * @description:
	 * @param inputStream文件流
	 * @param system系统区分
	 * @param fileName
	 *            文件名
	 * @return
	 * @throws Exception
	 * @author: donghang
	 * @date: 2021年3月13日下午10:21:24
	 * @modify:
	 */
	String upload(InputStream inputStream, FileInfoDTO fileInfo) throws Exception;

	/**
	 * 文件删除
	 * 
	 * @description:
	 * @param fileId
	 * @throws Exception
	 * @author: donghang
	 * @date: 2021年3月13日下午10:21:50
	 * @modify:
	 */
	void delete(FileInfoDTO fileInfo) throws Exception;

	/**
	 * 文件下载
	 * 
	 * @description:
	 * @param fileId
	 * @param outputStream
	 * @throws Exception
	 * @author: donghang
	 * @date: 2021年3月13日下午10:22:05
	 * @modify:
	 */
	InputStream downLoad(FileInfoDTO fileInfo) throws Exception;

	/**
	 * 下载文件到本地
	 * 
	 * @description:
	 * @param fileInfo
	 * @param filePath
	 * @throws Exception
	 * @author: donghang
	 * @date: 2021年3月18日下午11:26:42
	 * @modify:
	 */
	void downLoad(FileInfoDTO fileInfo, String filePath) throws Exception;

	/**
	 * 访问服务器的浏览url地址
	 * 
	 * @description:
	 * @param fileInfo
	 * @return
	 * @author: donghang
	 * @date: 2021年4月1日下午11:51:47
	 * @modify:
	 */
	public String accessUrl(FileInfoDTO fileInfo);

	/**
	 * 文件是否存在
	 * 
	 * @description:
	 * @param fileInfo
	 * @return
	 * @author: donghang
	 * @date: 2021年5月19日上午12:56:34
	 * @modify:
	 */

	public boolean fileIsExist(FileInfoDTO fileInfo);

	/**
	 * 协议
	 * 
	 * @description:
	 * @return
	 * @author: donghang
	 * @date: 2021年3月13日下午10:22:17
	 * @modify:
	 */
	String getStoreProtocol();

}
